/**
算法
1.冒泡算法  两两相比 小靠前  外层循环N-1,内层循环N-1-i
	1.对比相邻2数，大数右移
	2.最后一个元素最大
	3.稳定 相同值前后顺序不变
心得：
	外层循环  管 轮数	等价 元素个数-1
	内层循环	管 次数	等价	元素个数-1-第几轮
	相邻元素	大 放右

####
2.选择算法	  用于  数据规模小  不占额外内存空间  不稳定 同值不分先后					
	1.每轮 初始轮下标和元素比大小 ，如 小（大）  则移动轮下标
	2.此轮 元素走完 此轮初始下标 与 初始移动下标互换
	3.重复 直到结果
	2.不稳定 如同值不分先后
	
###
3.直接插入算法




###
4.二分查找法
1.数列有序 
2.按关键字有序排列
*@author leo
*@company leo's company
*@description java_study
2024年2月1日上午3:57:59
Administrator
 */

/*
package com.leo.第三章_方法和数组;
import java.util.Scanner;
import java.util.Arrays;
import java.util.Random;
@SuppressWarnings("unused")
public class U3_L12_15_冒泡_选择_直插_二分 {
	//public static void main(String[] args) {
	//	// TODO Auto-generated method stub
	//	//bubble_sort
	//	//1：数组隔离模式启动 
	//	//int []array= new int[10];
	//	//int []random_array=random_array(array);
	//	//bubble_sort(random_array);
	//	//bubble_sort(random_array,1);
	//	
	//	//choice_sort
	//	//int []array=new int[10];
	//	//int[]random_array=random_array(array);
	//	//choice_sort(random_array);
	//	
	//	//insert_sort
	//	//int []array=new int[10];
	//	//int []random_array=random_array(array);
	//	//insert_sort(random_array);
	//	
	//	//binary_search
	//	Scanner input=new Scanner(System.in);
	//	System.out.println("enter ur key: ");
	//	int key=input.nextInt();
	//	int []array=new int [10];
	//	int []random_array=random_array(array);
	//	String res=binary_search(random_array,key);
	//	System.out.println(res);
	//}
	
	//随机数组
	//public static int[] random_array(int[]array) {
	//	Random r=new Random();
	//	int len=array.length;
	//	for(int i=0;i<len;i++) {
	//		array[i]=r.nextInt(20);
	//	}
	//	
	//	System.out.print("random method over:  [ ");
	//	for(int ele:array) {
	//		System.out.print(ele+" ");
	//	}
	//	System.out.println("]");
	//	return array;
	//}

	
	//冒泡	稳定 速度慢
	//public static void bubble_sort(int []cal_array){
	//	
	//	
	//	int len=cal_array.length;
	//	//管轮
	//	for(int i=0;i<len-1;i++) {
	//		//管次
	//		for(int j=0;j<len-1-i;j++) {
	//			//大右移
	//			if(cal_array[j]>cal_array[j+1]) {
	//			cal_array[j]=cal_array[j]+cal_array[j+1];
	//			cal_array[j+1]=cal_array[j]-cal_array[j+1];
	//			cal_array[j]=cal_array[j]-cal_array[j+1];
	//			}	
	//		}
	//	}
	//	System.out.print("the cal_array: [");
	//	for (int ele:cal_array) {
	//		System.out.print(ele+" ");
	//	}
	//	System.out.println("]");
	//}
	
	//冒泡隔离模式 
	//public static void bubble_sort(int []random_array,int flag){
	//		
	//	int []cal_array=new int[10];
	//	int i_cal=0;
	//	for(int ele:random_array) {
	//		cal_array[i_cal]=ele;
	//		i_cal++;
	//	}
	//	int len=cal_array.length;
	//	//管轮
	//	for(int i=0;i<len-1;i++) {
	//		//管次
	//		for(int j=0;j<len-1-i;j++) {
	//			//大右移
	//			if(cal_array[j]>cal_array[j+1]) {
	//			cal_array[j]=cal_array[j]+cal_array[j+1];
	//			cal_array[j+1]=cal_array[j]-cal_array[j+1];
	//			cal_array[j]=cal_array[j]-cal_array[j+1];
	//			}	
	//		}
	//	}
	//	System.out.print("冒泡排序 数组隔离模式开启:\nthe cal_array: [");
	//	for (int ele:cal_array) {
	//		System.out.print(ele+" ");
	//	}
	//	System.out.println("]");
	//}
	
	
	//选择(隔离模式)	小数据 不占内存空间  不稳定 同值不分前后
	//public static void choice_sort(int[]random_array) {
	//	int []cal_array=new int[10];
	//	int i_cal=0;
	//	for(int ele:random_array) {
	//		cal_array[i_cal]=ele;
	//		i_cal++;
	//	}
	//	
	//	//下标
	//	int minIndex=0;
	//	int len=cal_array.length;
	//	//轮次
	//	for(int i=0;i<len-1;i++) {
	//		//每轮初始化轮下标                                  
	//		minIndex=i;
	//		//相邻对比 左大 下标右移
	//		for(int j=i+1;j<len;j++) {
	//			if(cal_array[minIndex]>cal_array[j]) {
	//				minIndex=j;
	//			}
	//		}
	//		//交换
	//		if(minIndex!=i) {
	//			cal_array[minIndex]=cal_array[minIndex]+cal_array[i];
	//			cal_array[i]=cal_array[minIndex]-cal_array[i];
	//			cal_array[minIndex]=cal_array[minIndex]-cal_array[i];
	//		}
	//	}
	//	
	//	System.out.print("after cal_array: [");
	//	for(int ele:cal_array) {
	//		System.out.print(ele+" ");
	//	}
	//	System.out.println("]");
	//}
	
	
	//直接插入排序(隔离模式)
	//public static void insert_sort(int []random_array) {
	//	int []cal_array=new int[10];
	//	int i_cal=0;
	//	for(int ele:random_array) {
	//		cal_array[i_cal]=ele;
	//		i_cal++;
	//	}
	//	
	//	int len=cal_array.length;
	//	for(int i=1;i<len;i++) {
	//		int temp=cal_array[i];
	//		int j=0;
	//		for(j=i-1;j>=0;j--) {
	//			if(cal_array[j]>temp) {
	//				cal_array[j+1]=cal_array[j];
	//			}else {
	//				break;
	//			}
	//		}
	//	if(cal_array[j+1]!=temp) {
	//		cal_array[j+1]=temp;
	//	}
	//	
	//	System.out.print("after cal_array: [");
	//	for(int ele:cal_array) {
	//		System.out.print(ele+" ");
	//	}
	//	System.out.println("]");
	//	}
	//}

	
	//二分查找 如需使用上面排序 需要 去除  排序类 头部的cal_array 
	//public static String binary_search(int [] random_array,int key) {
	//	int []cal_array=new int[10];
	//	int i_cal=0;
	//	for(int ele:random_array) {
	//		cal_array[i_cal]=ele;
	//		i_cal++;
	//	}
	//	
	//	//请选择喜欢的算法 sort  可以选择下标起始和结束位置
	//	//Arrays.sort(cal_array);
	//	//System.out.println(Arrays.equals(random_array, cal_array));
	//	//Arrays.sort(cal_array,0,4);
	//	//System.out.println(Arrays.toString(cal_array));
	//	//bubble_sort(cal_array);
	//	
	//	int len=cal_array.length;
	//	int start=0;
	//	int end =len-1;
	//	
	//	while(start<=end) {
	//		int middle=(start+end)>>>1;
	//		if(cal_array[middle]>key) {
	//			end=middle-1;
	//		}else if(cal_array[middle]<key) {
	//			start=middle+1;
	//		}else {
	//			System.out.print("after cal_array: [");
	//			for(int ele:cal_array) {
	//				System.out.print(ele+" ");
	//			}
	//			System.out.println("]");
	//			return	key+" ,此数在数列中的下标位置是: "+middle;
	//		}
	//	}
	//	return key+" ,此数不在此数列,返回错误代码: "+-1;
	//}
	
}
*/


